<?php

include_once 'class/tabela.php';

class grupos_usuarios extends tabela {

    public $codigo = 0;
    public $descricao = '';
    public $permissoes;    
    
    function __construct() {
        global $meubanco;
        parent::__construct('grupos_usuarios', $meubanco->id);
    }

    public function formulario($dados) {
        include 'forms/form_grupos_usuarios.php';
    }

    public function listar($dados) {
        include 'views/view_grupos_usuarios.php';
    }

    public function inserir($dados) {
        global $meubanco;
        if (!empty($dados['descricao'])) {
            $dados['usuario_cadastro'] = $_SESSION['eco_usuario']['id'];
            if (parent::inserir($dados, $meubanco->id)) {
                mensagem('Grupo cadastrado com sucesso.', 1);
            } else {
                mensagem('Não foi possível cadastrar o Grupo.', 2);
            }
        } else {
            mensagem('Campos obrigatórios não preenchidos.', 2);
        }
    }

    public function alterar($dados) {
        global $meubanco;
        if (!empty($dados['descricao'])) {
            if (parent::alterar($dados, $meubanco->id)) {
                mensagem('Grupo alterado com sucesso.', 1);
            } else {
                mensagem('Não foi possível alterar o Grupo.', 2);
            }
        } else {
            mensagem('Campos obrigatórios não preenchidos.', 2);
        }
    }

    public function excluir($id) {
        global $meubanco;
        $consulta = new consulta();
        $sql = "UPDATE grupos_usuarios SET ativo = 0 WHERE id = $id";
        if ($consulta->executar($sql, $meubanco->id)) {
            mensagem('Grupo excluído com sucesso.', 1);
        } else {
            mensagem('Não foi possível excluir o Grupo.', 3);
        }
    }
    
    public function setGrupoUsuario($id) {
        global $meubanco;
        $comando = "SELECT * FROM grupos_usuarios WHERE id = $id AND ativo = 1";
        $grupos = new consulta();
        $grupos->executar($comando, $meubanco->id);
        if ($grupos->numlinhas) {
            $this->codigo = $grupos->dados['id'];
            $this->descricao = $grupos->dados['descricao'];
            $this->setPermissoes($grupos->dados['id']);
            return true;
        } else {
            return false;
        }
    }
    
    public function setPermissoes($id) {
        global $meubanco;
        $consulta = new consulta();
        $sql = "SELECT p.nome FROM permissoes_grupos pg INNER JOIN permissoes p ON p.id = pg.id_permissao WHERE pg.id_grupo = $id";
        $consulta->executar($sql, $meubanco->id);
        if ($consulta->numlinhas) {
            do {
                $this->permissoes[] = $consulta->dados['nome'];
                $_SESSION['permissoes'] = $this->permissoes;
            } while ($consulta->proximo());
            return true;
        } else {
            return false;
        }
    }
    
    public function fromularioGrupoPermissoes() {
        $dados['html'] = $this->tagsCheckboxPermissoes();
        $dados['gru_per_gru_id'] = $this->gru_id;
        include 'forms/form_permissoes.php';
    }
    
    public function inserirPermissoes($dados) {
        global $meubanco;
        if (!empty($dados['id_grupo'])) {
            mysqli_autocommit($meubanco->id, false);
            try {
                $sql = "DELETE FROM permissoes_grupos WHERE id_grupo = {$dados['id_grupo']}";
                $delete = new consulta();
                $delete->executar($sql, $meubanco->id);
                if ($dados['permissoes']) {
                    foreach ($dados['permissoes'] as $permissao) {
                        $sql = "INSERT INTO permissoes_grupos (id_grupo, id_permissao) VALUES ('{$dados['id_grupo']}', '$permissao')";
                        $consulta = new consulta();
                        $consulta->executar($sql, $meubanco->id);
                        if (!$consulta->numlinhas) {
                            throw new Exception("Erro ao salvar permissões! (2)");
                        }
                    }
                }
                unset($dados['permissoes']);
                mysqli_commit($meubanco->id);
                mensagem('Permissões cadastradas com sucesso.', 1);
            } catch (Exception $exc) {
                mysqli_rollback($meubanco->id);
                mensagem($exc->getMessage(), 3);
            }
            mysqli_autocommit($meubanco->id, true);
        } else {
            mensagem('Erro. Consulte o administrador', 3);
        }
    }

    public function tags_tr() {
        global $meubanco;
        $guid = $_SESSION['eco_usuario']['id_grupo'];
        $linhas = '';
        $cons = new consulta();
        $sql = "SELECT id, descricao FROM grupos_usuarios WHERE ativo ORDER BY descricao";
        $cons->executar($sql, $meubanco->id);
        if ($cons->numlinhas) {
            do {
                $linhas .= "<tr><td>{$cons->dados['descricao']}</td><td class='acoes'>";
                if (cp('gru_upd', dp($guid)))
                    $linhas .= '<a href="?p=admgrupos_usuarios&opcao=a&id=' . $cons->dados['id'] . '" class="tip" title="Editar Grupo" data-placement="top"><img src="img/icons/essen/16/edit.png" alt=""></a>';
                if (cp('gru_del', dp($guid)))
                    $linhas .= '<a href="?p=admgrupos_usuarios&opcao=ec&id=' . $cons->dados['id'] . '" class="tip" title="Excluir Grupo" data-placement="top"><img src="img/icons/essen/16/busy.png" alt=""></a>';
                if (cp('gru_per', dp($guid)))
                    $linhas .= '<a href="?p=admgrupos_usuarios&opcao=p&id=' . $cons->dados['id'] . '" class="tip" title="Permissões" data-placement="top"><img src="img/icons/essen/16/lock.png" alt=""></a>';
                $linhas .= "</td></tr>";
            } while ($cons->proximo());
        }
        return $linhas;
    }

    public function tags_option($selected = 0) {
        global $meubanco;
        $linhas = '';
        $cons = new consulta();
        $sql = "SELECT id, descricao FROM grupos_usuarios WHERE ativo ORDER BY descricao";
        $cons->executar($sql, $meubanco->id);
        if ($cons->numlinhas) {
            do {
                if ($selected == $cons->dados['codigo'])
                    $complmt = 'selected="selected"';
                else
                    $complmt = '';
                $linhas .= "<option value=\"{$cons->dados['id']}\" $complmt>{$cons->dados['descricao']}</option>\n";
            } while ($cons->proximo());
        }
        return $linhas;
    }

    public function tagsCheckboxPermissoes() {
        global $meubanco;
        $html;
        $consulta = new consulta();
        $marcadas = '0';
        if ($this->permissoes) {
            $marcadas = implode("', '", $this->permissoes);
        }
        $sql = "SELECT *, IF(nome IN ('$marcadas'), 'checked', '') AS checked FROM permissoes ORDER BY modulo, nome";
        $consulta->executar($sql, $meubanco->id);
        do {
            $arrPermissoes[$consulta->dados['modulo']][] = <<<HTML
            <div style="float:left;">
                <div class="control-group">
                        <label style="margin-right:30px;"><input type="checkbox" class="group uniform" {$consulta->dados['checked']} name="permissoes[]" id="p" value="{$consulta->dados['id']}" />
                        {$consulta->dados['permissao']}</label> 
                </div>  
            </div>
            
            
HTML;
        } while ($consulta->proximo());
        foreach ($arrPermissoes as $categoria => $checkboxs) {
            $html .= "<div style='clear:both; margin-top:5px;'></div><div class='row-fluid'><h4 style='color:#900'>$categoria</h4><hr style='border:0px; border-bottom:1px dashed #333; margin-top:5px;' />";
            foreach ($checkboxs as $checkbox) {
                $html .= $checkbox;
            }
        }
        return $html . "</div><div style='clear:both'></div>";
    }    
}